package com.wzk.travelspringboot.task;

import com.wzk.travelspringboot.common.LogToFile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.logging.Logger;

/**
 * @Author: WangZiKang
 * @Date: 2025/1/5 12:37
 */
@Slf4j
@Component
public class ClearLogFileTask {
    public static final Logger logger = Logger.getLogger(ClearLogFileTask.class.getName());

    //每7天执行一次
    @Scheduled(cron = "0 0 0 * * 1")
    public void clearLogs(){
        log.info("开始清理日志.....");
        try {
            Path logFilePath = Paths.get("logs");
            // 检查目录是否存在并且是一个目录
            if (Files.exists(logFilePath) && Files.isDirectory(logFilePath)) {
                //执行删除操作
                deleteDirectoryContents(logFilePath);
                log.info("清除日志文件成功！");
            } else {
                log.info("logs目录不存在！无需清除");
            }
        }catch (Exception e){
            log.error("定时删除日志文件出现异常！异常：{}",e.getMessage());
            LogToFile.logToFile("定时删除日志文件出现异常！异常："+e.getMessage(),logger,"clear_log_err");
        }
    }

    // 删除目录下所有内容（包括子目录和文件）
    private void deleteDirectoryContents(Path directory) throws IOException {
        // 使用 Files.walkFileTree 遍历目录中的所有文件和子目录
        Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                // 删除文件
                Files.delete(file);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                // 删除空目录
                Files.delete(dir);
                return FileVisitResult.CONTINUE;
            }
        });
    }
}
